/**
 * 
 */
package com.firebird.oms.service.sm;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.firebird.base.domain.Page;
import com.firebird.oms.domain.sm.TismFunction;
import com.firebird.oms.domain.sm.TismLoginLog;
import com.firebird.oms.domain.sm.TismMenu;
import com.firebird.oms.domain.sm.TismRole;
import com.firebird.oms.domain.sm.TismStaff;
import com.firebird.oms.domain.sm.TismWorker;
import com.firebird.oms.domain.sm.TismWorkerChgPwd;
import com.firebird.oms.user.UserDetails;

/**
 * @author qiuxj
 * @date 2009-11-21
 *
 */
public interface AuthService {
	
	/**
	 * 创建权限
	 * @param smFunction
	 * @return
	 */
	public abstract Serializable createFunction(TismFunction smFunction);

	/**
	 * 更新工号
	 * @param tismWorker
	 */
	public abstract void updateWorker(TismWorker tismWorker);

	/**
	 * 根据登录工号获取工号信息
	 * @param loginCode
	 * @return
	 */
	public abstract TismWorker getUniqueWorker(String loginCode);

	/**
	 * 获取工号信息
	 * @param loginId
	 * @return
	 */
	public abstract TismWorker getWorker(int loginId);

	/**
	 * 保存工号信息
	 * @param tismWorker
	 */
	public abstract void saveWorker(TismWorker tismWorker);

	/**
	 * 获取员工信息
	 * @param staffId
	 * @return
	 */
	public abstract TismStaff getStaff(int staffId);
	
	/**
	 * 获取员工信息列表
	 * @param filter
	 * @return
	 */
	public List<TismStaff> findStaff(Map<String, String> filter);
	
	/**
	 * 获取员工所有的下级员工
	 * @param upStaffId
	 * @return
	 */
	public List<Integer> getChildStaff(Integer upStaffId);

	/**
	 * 创建菜单
	 * @param menu
	 */
	public abstract void createMenu(TismMenu menu);

	/**
	 * 创建角色
	 * @param smRole
	 * @return
	 */
	public abstract Serializable createRole(TismRole smRole);

	/**
	 * 查找菜单
	 * @param filter
	 * @return
	 */
	public abstract List<TismMenu> findMenu(Map<String, String> filter);

	/**
	 * 根据菜单ID查找菜单信息
	 * @param menuCode
	 * @return
	 */
	public abstract TismMenu getMenu(int menuCode);

	/**
	 * 获取排序后的菜单
	 * @param menuCode
	 * @return
	 */
	public abstract List<TismMenu> getMenuSorted(int menuCode);

	/**
	 * 根据角色ID查找角色信息
	 * @param roleId
	 * @return
	 */
	public abstract TismRole getTismRole(int roleId);
	
	/**
	 * 获取角色对应的权限
	 * @param roleId
	 * @return
	 */
	public TismRole getTismRoleAndExt(int roleId);

	/**
	 * 根据权限ID查找权限信息
	 * @param funcId
	 * @return
	 */
	public abstract TismFunction getTismFunction(int funcId);
	
	/**
	 * 取得权限及对应的菜单
	 * @param funcId
	 * @return
	 */
	public TismFunction getTismFunctionAndExt(int funcId);

	/**
	 * 查找权限信息
	 * @param filter
	 * @return
	 */
	public abstract List<TismFunction> findTismFunctions(
			Map<String, String> filter);

	/**
	 * 获取权限分页
	 * @param filter
	 * @param likeMap
	 * @param sortMap
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public abstract Page pageFunction(Map<String, String> filter,
			Map<String, String> likeMap, Map<String, String> sortMap,
			int pageNo, int pageSize);

	/**
	 * 获取角色分页
	 * @param filter
	 * @param like
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public abstract Page pageRole(Map<String, String> filter,
			Map<String, String> like, int pageNo, int pageSize);

	/**
	 * 查找角色列表
	 * @param filter
	 * @return
	 */
	public abstract List<TismRole> findRole(Map<String, String> filter);

	/**
	 * 获取菜单分页
	 * @param filter
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	public abstract Page pageTismMenu(Map<String, String> filter, int pageNo,
			int pageSize);

	/**
	 * 更新权限信息
	 * @param smFunction
	 */
	public abstract void updateFunction(TismFunction smFunction);

	/**
	 * 更新菜单信息
	 * @param menu
	 */
	public abstract void updateMenu(TismMenu menu);

	/**
	 * 更新角色信息
	 * @param smRole
	 */
	public abstract void updateRole(TismRole smRole);

	/**
	 * 创建登录日志
	 * @param tismLoginLog
	 */
	public abstract void createLoginLog(TismLoginLog tismLoginLog);

	/**
	 * 获取登录日志
	 * @param filter
	 * @return
	 */
	public abstract List<TismLoginLog> getLoginLog(Map<String, Object> filter);

	/**
	 * 更新登录日志信息
	 * @param tismLoginLog
	 */
	public abstract void updateLoginLog(TismLoginLog tismLoginLog);

	/**
	 * 把当前工号的响应日志信息置为失效
	 * @param loginId
	 */
	public abstract void updateAllLoginLog(int loginId, int logType);

	/**
	 * 获取密码修改记录
	 * @param loginId
	 * @return
	 */
	public abstract List<TismWorkerChgPwd> findWorkerChgPwd(int loginId);

	/**
	 * 创建密码修改记录
	 * @param smWorkerChgPwd
	 */
	public abstract void createWorkerChgPwd(TismWorkerChgPwd smWorkerChgPwd);

	/**
	 * 用户登录
	 * @param loginCode
	 * @param passWord
	 * @param sessionId
	 * @param ipAddress
	 * @param macAddr
	 * @return
	 */
	public abstract Map<String, Object> doAuth(String loginCode,
			String passWord, String sessionId, String ipAddress, String macAddr);

	/**
	 * 用户退出
	 * @param loginId
	 */
	public abstract void doLogout(int loginId, String sessionId,
			String ipAddress, String macAddr);

	/**
	 * 修改密码
	 * @param loginId
	 * @param password
	 */
	public abstract void doChangePassword(int loginId, String password);

	/**
	 * 查找登录用户的菜单
	 * @param currentUser
	 * @param menuCode
	 * @return
	 */
	public abstract List<TismMenu> findMenus(UserDetails currentUser,
			int menuCode);
	
	/**
	 * 判断用户输入的密码是否在最近5次的密码修改记录 如果是，则不能修改密码（返回false）
	 * @param loginId
	 * @param password
	 * @return
	 */
	public Boolean isPwdChg(int loginId, String password);

}
